"""
Diese Klasse ist zustaendig fur die Anzeige bei Interaktionen. Hier wird der Text angezeigt und bei Tastendruck gewechselt.

@author: Max
"""
import os

import pygame

import Colors  # @UnresolvedImport


class Options(object):
    def __init__(self, log, res):
        self.surfHud = pygame.Surface(res).convert()
        self.surfHud.set_colorkey(Colors.RED)
        self.imgBG = pygame.image.load(os.path.join("..", "Resources", "Assets", "hud.png"))
        self.imgBG = pygame.transform.scale(self.imgBG, self.surfHud.get_size())
        self.surfHud.blit(self.imgBG, (0, 0))
        self.surfHud.set_alpha(30)
        
        self.Font = pygame.font.Font(None, 40)
        self.aStrOptions = [
           "Speichern",
           "Laden",
           "Beenden"                           
        ]
        self.aShelfSaveGame = []
        
        self.Log = log
        self.res = res
        
        self.iIndex = 0
        self.currentSelection = 0
        
        self.bCloseHud = False
        
        self.iTimeSinceLastAction = 0
        self.Log.printToLog("Options: Geoeffnet")
    
    
    def render(self, dt):
        """
        Wenn ein HUD aktiv ist wird diese Funktion ausgefuehrt und stellt sicher, dass immer der richtige Text angezeigt wird.
        """
        self.iTimeSinceLastAction += dt
        
        self.surfHud.fill(Colors.RED)
        
        self.surfHud.blit(self.imgBG, (0, 0))
        i = 50
        for elem in self.aStrOptions:
            color = Colors.WHITE
            if self.currentSelection == elem:
                color = Colors.GREEN
            self.dsText = self.Font.render(elem, 1, color)
            self.surfHud.blit(self.dsText, (30, i))
            i += 100
    
    def update(self):
        self.currentSelection = self.aStrOptions[self.iIndex]
        
    def handleInput(self, event, savestate=None):
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RETURN:
                if self.iIndex == 0:
                    self.Log.printToLog("Options: Spielstand wird gespeichert")
                    self.bCloseHud = True
                    return 1
                elif self.iIndex == 1:
                    self.Log.printToLog("Options: Spielstand wird geladen")
                    return 2
                elif self.iIndex == 2:
                    return -1
            elif event.key == pygame.K_ESCAPE:
                self.Log.printToLog("Options: Geschlossen")
                self.bCloseHud = True
            elif event.key == pygame.K_DOWN or event.key == pygame.K_UP:
                faktor = 1
                if event.key == pygame.K_UP:
                    faktor *= -1
                self.iIndex += 1 * faktor
                if abs(self.iIndex) > 2:
                    self.iIndex = 0
        return 0
